package com.bzkj.basicinfo.service.warehouse;

import com.bzkj.basicinfo.domain.warehouse.PdaWarehouseOutBillsList;
import java.util.List;

/**
 * 出库单据Service接口
 * 
 * @author system
 * @date 2025-10-17
 */
public interface IPdaWarehouseOutBillsService {
    
    /**
     * 查询出库单据列表
     * 
     * @param billsList 出库单据主表
     * @return 出库单据集合
     */
    List<PdaWarehouseOutBillsList> selectPdaWarehouseOutBillsList(PdaWarehouseOutBillsList billsList);

    /**
     * 查询出库单据详情
     * 
     * @param billsID 单据号
     * @return 出库单据
     */
    PdaWarehouseOutBillsList selectPdaWarehouseOutBillsByBillsID(String billsID);

    /**
     * 新增出库单据
     * 
     * @param billsList 出库单据主表
     * @return 结果
     */
    int insertPdaWarehouseOutBillsList(PdaWarehouseOutBillsList billsList);

    /**
     * 修改出库单据
     * 
     * @param billsList 出库单据主表
     * @return 结果
     */
    int updatePdaWarehouseOutBillsList(PdaWarehouseOutBillsList billsList);

    /**
     * 批量删除出库单据
     * 
     * @param billsIDs 需要删除的出库单据主键集合
     * @return 结果
     */
    int deletePdaWarehouseOutBillsByBillsIDs(String[] billsIDs);

    /**
     * 删除出库单据信息
     *
     * @param billsID 出库单据主键
     * @return 结果
     */
    int deletePdaWarehouseOutBillsByBillsID(String billsID);

    /**
     * 制单操作
     *
     * @param billsList 出库单据
     * @return 结果
     */
    int createBill(PdaWarehouseOutBillsList billsList);

    /**
     * 拣货操作（支持FIFO）
     *
     * @param billsID 单据号
     * @param pickingUserId 拣货人ID
     * @param pickingUserName 拣货人姓名
     * @return 结果
     */
    int pickingGoods(String billsID, String pickingUserId, String pickingUserName);

    /**
     * 复核操作
     *
     * @param billsID 单据号
     * @param reviewUserId 复核人ID
     * @param reviewUserName 复核人姓名
     * @return 结果
     */
    int reviewGoods(String billsID, String reviewUserId, String reviewUserName);

    /**
     * 出库操作
     *
     * @param billsID 单据号
     * @param outUserId 出库人ID
     * @param outUserName 出库人姓名
     * @return 结果
     */
    int deliverGoods(String billsID, String outUserId, String outUserName);
}

